/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package org.cip.esymons.eventos.bc;

import java.util.ArrayList;
import java.util.List;
import java.util.Vector;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import org.cip.esymons.eventos.be.DirectorioInvitacion;
import org.cip.esymons.eventos.be.Evento;
import org.cip.esymons.general.bc.AreaFacade;
import org.cip.esymons.general.bc.PersonaJuridicaFacade;
import org.cip.esymons.general.be.Area;
import org.cip.esymons.general.be.PersonaJuridica;
import org.cip.esymons.general.util.Utiles;

/**
 *
 * @author Lizardo Rios
 */
@Stateless
public class DirectorioInivtacionFacade implements DirectorioInivtacionFacadeLocal {

    @PersistenceContext
    private EntityManager em;

    public void create(DirectorioInvitacion directorio) {
        em.persist(directorio);
    }

    public void edit(DirectorioInvitacion directorio) {
        em.merge(directorio);
    }

    public void remove(DirectorioInvitacion directorio) {
        em.remove(em.merge(directorio));
    }

    public DirectorioInvitacion find(Object id) {
        return em.find(DirectorioInvitacion.class, id);
    }

    public List<DirectorioInvitacion> findAll() {
        return em.createQuery("select d from DirectorioInvitacion d").getResultList();
    }

    public List<DirectorioInvitacion> listarDirectorios(Integer eveCodigo, Integer areCodigo) {
        em.flush();
        String sql = "select di from DirectorioInvitacion di where di.eveCodigo.eveCodigo = ?1 and di.areCodigo.areCodigo = ?2";
        return em.createQuery(sql)
                .setParameter(1, eveCodigo)
                .setParameter(2, areCodigo)
                .getResultList();
    }

    public List<DirectorioInvitacion> listarDirectorioXAreaXEmpresa(Integer areCodigo, Integer empCodigo) {
        List<DirectorioInvitacion> lista = new ArrayList<DirectorioInvitacion>();
        Vector v = new Vector();
        v = (Vector) em.createNativeQuery("call sp_listarDirectorioInvitacion (?,?)")
                .setParameter(1, areCodigo)
                .setParameter(2, empCodigo)
                .getResultList();
//        System.out.println(" elemento 0 " + v.get(0).toString());
        for (int i = 0; i < v.size(); i++) {
            DirectorioInvitacion di = new DirectorioInvitacion();
            Area a = new Area();
            PersonaJuridica p = new PersonaJuridica();
            di.setAreCodigo(a);
            di.setEmpCodigo(p);
//            mc.setModNombre(((String) ((Vector) v.elementAt(i)).get(2)).toString());
//            c.setEveCodigo(((Long) ((Vector) v.elementAt(i)).get(3)).intValue());
//            mc.setModfechaInicio(((Date) ((Vector) v.elementAt(i)).get(4)));
//            mc.setModfechaFin(((Date) ((Vector) v.elementAt(i)).get(5)));
//            mc.setModTipo(((Boolean) ((Vector) v.elementAt(i)).get(6)).booleanValue());
            try {
//                p.setPreCodigo(((Long) ((Vector) v.elementAt(i)).get(7)).intValue());
//                mc.setPreCodigo(p);
            } catch (Exception e) {
            }
            try {
//                mc.setModTemario(((String) ((Vector) v.elementAt(i)).get(8)).toString());
            } catch (Exception e) {
            }
            //mc.setCurCodigo(c);
            lista.add(di);
            a = null;
            p = null;
        }
        return lista;
    }

    /*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
    public List<PersonaJuridica> listarEmpresas(Integer eveCodigo, Integer areCodigo) {
        List<PersonaJuridica> lista = new ArrayList<PersonaJuridica>();
        Vector v = new Vector();
        v = (Vector) em.createNativeQuery("call sp_listar_empresas_sin_directorio (?,?);")
                .setParameter(1, eveCodigo)
                .setParameter(2, areCodigo)
                .getResultList();
        System.out.println(" elemento 0 " + v.get(0).toString());
        for (int i = 0; i < v.size(); i++) {
            PersonaJuridica pj = new PersonaJuridica();
            System.out.println("empCodigo: " + ((Vector) v.elementAt(i)).get(0).toString());
            //pj.setSolCodigo(((Long) ((Vector) v.elementAt(i)).get(0)));
            pj.setSolCodigo(Utiles.aEnteroLargo(((Vector) v.elementAt(i)).get(0).toString()));
            pj.setEmprazonSocial(((String) ((Vector) v.elementAt(i)).get(2)).toString());
            lista.add(pj);
            pj = null;
        }
        return lista;
    }

    public List<DirectorioInvitacion> listarDirectoriosInvitacion(Integer eveCodigo, Integer areCodigo) {
        List<DirectorioInvitacion> lista = new ArrayList<DirectorioInvitacion>();
        Vector v = new Vector();
        v = (Vector) em.createNativeQuery("call sp_listar_directorios (?,?);")
                .setParameter(1, eveCodigo)
                .setParameter(2, areCodigo)
                .getResultList();
        //System.out.println(" elemento 0 " + v.get(0).toString());
        for (int i = 0; i < v.size(); i++) {
            DirectorioInvitacion di = new DirectorioInvitacion();
            
            di.setDinCodigo(Utiles.aEnteroLargo(((Vector) v.elementAt(i)).get(0).toString()));

            Evento e = new Evento();
            EventoFacade facadeEvento = new EventoFacade();
            Integer eventoCodigo = Utiles.aEntero(((Vector) v.elementAt(i)).get(1).toString());
            e = facadeEvento.find(eventoCodigo);
            facadeEvento = null;
            di.setEveCodigo(e);

            Area a = new Area();
            AreaFacade facadeArea = new AreaFacade();
            Integer areaCodigo = Utiles.aEntero(((Vector) v.elementAt(i)).get(2).toString());
            a = facadeArea.find(areaCodigo);
            facadeArea = null;
            di.setAreCodigo(a);

            PersonaJuridica pj = new PersonaJuridica();
            PersonaJuridicaFacade facadePersonaJuridica = new PersonaJuridicaFacade();
            Long empCodigo = Utiles.aEnteroLargo(((Vector) v.elementAt(i)).get(3).toString());
            pj = facadePersonaJuridica.find(empCodigo);
            facadePersonaJuridica = null;
            di.setEmpCodigo(pj);

            String direccion = ( (((Vector) v.elementAt(i)).get(4)) != null ) ? (((Vector) v.elementAt(i)).get(4)).toString() : "";
            di.setDinDireccion(direccion);

            String representante = ( (((Vector) v.elementAt(i)).get(5)) != null ) ? (((Vector) v.elementAt(i)).get(5)).toString() : "";
            di.setDinRepresentante(representante);

            String telefono = ( (((Vector) v.elementAt(i)).get(6)) != null ) ? (((Vector) v.elementAt(i)).get(6)).toString() : "";
            di.setDinTelefono(telefono);

            String celular = ( (((Vector) v.elementAt(i)).get(7)) != null ) ? (((Vector) v.elementAt(i)).get(7)).toString() : "";
            di.setDinCelular(celular);

            String mail = ( (((Vector) v.elementAt(i)).get(8)) != null ) ? (((Vector) v.elementAt(i)).get(8)).toString() : "";
            di.setDinMail(mail);

            lista.add(di);
            di = null;
            e = null;
            a = null;
            pj = null;
        }
        return lista;
    }

}
